#include "OneWire.h"
#include <Arduino.h>

/**————————————————————————————————————————————————————————————————————
	*	@对象：DS18B20
	*	@定义：初始化
	*	@功能：
————————————————————————————————————————————————————————————————————*/
unsigned char OneWire_Init(void)
{
	unsigned char i;
	unsigned char AckBit;
	digitalWrite(25,HIGH);
	digitalWrite(25, LOW);
	i = 247;	while (--i);       //Delay 500us
	digitalWrite(25,HIGH);
	i = 32;	while (--i);       //Delay 70us
	AckBit= digitalRead(25);
	i = 247;	while (--i);       //Delay 500us
	digitalWrite(25, LOW);
	return AckBit;
}
 /**————————————————————————————————————————————————————————————————————
	*	@对象：DS18B20
	*	@定义：发送一位数据
	*	@功能：
————————————————————————————————————————————————————————————————————*/
void OneWire_SendBit(unsigned char Bit)
{
	unsigned char i;
	digitalWrite(25, LOW);
	i = 4;while (--i);			//Delay 10us
	digitalWrite(25,Bit);
	i = 24;while (--i);			//Delay 50us
	digitalWrite(25,HIGH);
}

 /**————————————————————————————————————————————————————————————————————
	*	@对象：DS18B20
	*	@定义：接受一位数据
	*	@功能：
————————————————————————————————————————————————————————————————————*/
unsigned char OneWire_ReceiveBit(void)
{
	unsigned char i;
	unsigned char Bit;
	digitalWrite(25, LOW);
	i = 2;while (--i);			//Delay 5us
	digitalWrite(25,HIGH);
	i = 2;while (--i);			//Delay 5us
	Bit=digitalRead(25);
	i = 24;while (--i);			//Delay 50us
	return Bit;
}
/**————————————————————————————————————————————————————————————————————
	*	@对象：DS18B20
	*	@定义：Byte 要发送的字节
	*	@功能：单总线发送一个字节
————————————————————————————————————————————————————————————————————*/
void OneWire_SendByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		OneWire_SendBit(Byte&(0x01<<i));
	}
}


/**————————————————————————————————————————————————————————————————————
	*	@对象：DS18B20
	*	@定义：
	*	@功能：单总线接收一个字节
————————————————————————————————————————————————————————————————————*/
unsigned char OneWire_ReceiveByte(void)
{
	unsigned char i;
	unsigned char Byte=0x00;
	for(i=0;i<8;i++)
	{
		if(OneWire_ReceiveBit()){Byte|=(0x01<<i);}
	}
	return Byte;
}

